Skip to content

[rush] Enhance performance data in telemetry payload#5269

Merged
dmichon-msft merged 6 commits intomicrosoft:mainfrom
dmichon-msft:performance-marks
Jul 12, 2025
Merged

[rush] Enhance performance data in telemetry payload#5269
dmichon-msft merged 6 commits intomicrosoft:mainfrom
dmichon-msft:performance-marks

Conversation

@dmichon-msft
Copy link
Contributor

@dmichon-msft dmichon-msft commented Jul 3, 2025

Summary

Adds enhanced performance monitoring data to the Rush telemetry payloads.

Note that the Rush telemetry subsystem by default only writes to a file (if enabled by the telemetryEnabled: true flag in rush.json) and does not get uploaded anywhere without custom plugins.

Details

Adds performance measures around various critical pieces of Rush, paying particular attention to phased commands.

Updates the telemetry subsystem to extract all performance measures since the last payload (if any) and record them as a performanceEntries array in the telemetry payload.

Note that these values are not present during the beforeLog hook and are only available in flushTelemetry.

How it was tested

rush build -o tree-pattern in rushstack repository

[
  {
    "name": "build",
    "durationInSeconds": 0.21093514500000005,
    "result": "Failed",
    "extraData": {
      "command_from": "false",
      "command_impactedBy": "false",
      "command_impactedByExcept": "false",
      "command_only": "true",
      "command_to": "false",
      "command_toExcept": "false",
      "command_fromVersionPolicy": "false",
      "command_toVersionPolicy": "false",
      "--timeline": "false",
      "--log-cobuild-plan": "false",
      "--to": "",
      "--to-except": "",
      "--from": "",
      "--only": "tree-pattern",
      "--impacted-by": "",
      "--impacted-by-except": "",
      "--to-version-policy": "",
      "--from-version-policy": "",
      "--verbose": "false",
      "--include-phase-deps": "false",
      "--changed-projects-only": false,
      "--ignore-hooks": "false",
      "--debug-build-cache-ids": "false",
      "--no-color": "false",
      "--production": "false",
      "--fix": "false",
      "isWatch": false,
      "isInitial": true,
      "countAll": 1,
      "countSuccess": 0,
      "countSuccessWithWarnings": 0,
      "countFailure": 1,
      "countBlocked": 0,
      "countFromCache": 0,
      "countSkipped": 0,
      "countNoOp": 0
    },
    "operationResults": {
      "@rushstack/tree-pattern (build)": {
        "startTimestampMs": 1004.183634,
        "endTimestampMs": 1018.802925,
        "nonCachedDurationMs": 4720.420041,
        "wasExecutedOnThisMachine": true,
        "result": "FAILURE",
        "dependencies": []
      }
    },
    "performanceEntries": [
      {
        "name": "rush:initializeUnassociatedPlugins",
        "entryType": "measure",
        "startTime": 648.06951,
        "duration": 143.649452,
        "detail": null
      },
      {
        "name": "rush:action:initializePluginsAsync",
        "entryType": "measure",
        "startTime": 798.356563,
        "duration": 0.07410799999991013,
        "detail": null
      },
      {
        "name": "rush:action:initializePlugins",
        "entryType": "measure",
        "startTime": 798.445248,
        "duration": 0.8410710000000563,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:checkInstallFlag",
        "entryType": "measure",
        "startTime": 810.56529,
        "duration": 16.51464199999998,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:doBeforeTask",
        "entryType": "measure",
        "startTime": 827.12677,
        "duration": 0.44064300000002277,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:applyStandardPlugins",
        "entryType": "measure",
        "startTime": 827.708677,
        "duration": 0.38100100000008297,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:configureBuildCache",
        "entryType": "measure",
        "startTime": 828.119253,
        "duration": 23.40427299999999,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:getSelectedProjects",
        "entryType": "measure",
        "startTime": 851.551488,
        "duration": 0.7206470000000991,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:applySituationalPlugins",
        "entryType": "measure",
        "startTime": 852.287904,
        "duration": 1.0280309999999417,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:loadProjectConfigurations",
        "entryType": "measure",
        "startTime": 862.261596,
        "duration": 16.415706999999998,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:createOperations",
        "entryType": "measure",
        "startTime": 878.852461,
        "duration": 1.196866,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:analyzeRepoState",
        "entryType": "measure",
        "startTime": 880.058784,
        "duration": 118.88852800000006,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:executeOperationsInner",
        "entryType": "measure",
        "startTime": 1001.113829,
        "duration": 19.61600599999997,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:beforeExecuteOperations",
        "entryType": "measure",
        "startTime": 1001.464535,
        "duration": 1.1921470000000909,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:afterExecuteOperations",
        "entryType": "measure",
        "startTime": 1020.744743,
        "duration": 0.7373069999999871,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:doAfterTask",
        "entryType": "measure",
        "startTime": 1021.520773,
        "duration": 0.05005300000004809,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:prepareTelemetry",
        "entryType": "measure",
        "startTime": 1021.576747,
        "duration": 0.4743470000000798,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:beforeLog",
        "entryType": "measure",
        "startTime": 1022.057706,
        "duration": 0.07577099999991788,
        "detail": null
      }
    ],
    "machineInfo": {
      "machineArchitecture": "x64",
      "machineCpu": "AMD EPYC 7763 64-Core Processor",
      "machineCores": 16,
      "machineTotalMemoryMiB": 64298,
      "machineFreeMemoryMiB": 59146
    },
    "timestampMs": 1751581013669,
    "platform": "linux",
    "rushVersion": "5.155.1"
  }
]

Impacted documentation

Documentation about the telemetry payload.

@dmichon-msft dmichon-msft merged commit 25ecb0b into microsoft:main Jul 12, 2025
5 checks passed
@github-project-automation github-project-automation bot moved this from Needs triage to Closed in Bug Triage Jul 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Closed

Development

Successfully merging this pull request may close these issues.

3 participants